func combinationSum4(nums []int, target int) int {
    /*
        力扣 377 组合总和 IV
        1. dp 的定义
            dp[j]：总和为i的组合总数为dp[j]

        2. dp 的递推公式
            dp[j] += dp[j-nums[i]]

        3. dp 数组的初始化
            dp[0] = 1 无意义用于递推

        4. dp 数组的遍历顺序
            由于是排列问题，先遍历容量再遍历物品。

        5. dp数组的推到    
    */

    dp := make([]int, target+1)
    dp[0] = 1
    for j:=0; j<=target; j++ {
        for i:=0; i<len(nums); i++ {
            if j-nums[i] >= 0 {
                dp[j] += dp[j - nums[i]]
            } 
        }
    }
    return dp[target]
}